package dota2

import (
	"longmen/server/config/global"
	response2 "longmen/server/internal/services/nami/api/v5/esports/dota2/response"
	"longmen/server/internal/services/nami/config"
	"longmen/server/internal/services/nami/services/esport"
	dota22 "longmen/server/internal/services/nami/services/esport/dota2"
	"longmen/server/internal/services/nami/utils/restyclient"
	"time"
)

type Dota2 struct {
}

// SyncMatch 获取赛程赛果列表-日期查询
// 该接口返回所请求日期的全量赛程赛果数据（请求限制：前后30天）
// 当天赛程 建议请求频次：10min/次（全量更新）
// 未来赛程 建议请求频次：30min/次（全量更新）
func (Dota2) SyncMatch() {
	resp := response2.MatchResponse{}
	err := restyclient.ESportGetUrlAndBindRecords(
		config.DOTAMatchUrl+config.BuildParamsAndUserAndSecret(map[string]interface{}{
			"date": time.Now().Format("20060102"),
		}),
		&resp)
	if err != nil {
		global.Log.Error("获取Dota2比赛: ", err)
		return
	}
	records := resp.MatchTemp()
	if len(records) > 0 {
		esport.CreateMatchTempSchedule(records)
	}
}

// SyncDelete 获取删除数据
// 返回最近24小时内删除的各维度数据id，需定时同步
// 建议请求频次：1~5min/次
func (Dota2) SyncDelete() {
	resp := response2.DeleteResponse{}
	err := restyclient.ESportGetUrlAndBindRecords(config.DOTADeleteUrl+config.BuildParamsAndUserAndSecret(), &resp)
	if err != nil {
		global.Log.Error("获取Dota2删除数据: ", err)
		return
	}

	for _, item := range resp.Results {
		if item.Type == 10 {
			esport.DeleteMatchTempSchedule(item.Ids)
			break
		}
	}

}

// SyncTeam 获取战队列表
// 返回全量战队数据，可根据时间戳增量获取新增或变动的数据
// 1、首次全量更新，根据参数id获取全量数据
// 2、后续增量更新，根据参数time增量获取变动数据（建议请求频次：1min/次）
func (Dota2) SyncTeam() {
	resp := response2.TeamApiResponse{}
	startTime := dota22.GetTeamTime()
	queryStr := config.BuildParamsAndUserAndSecret(map[string]interface{}{
		"timehelper":  startTime,
		"limit": 1000,
	})
	err := restyclient.ESportGetUrlAndBindRecords(config.DOTATeamUrl+queryStr, &resp)
	if err != nil {
		global.Log.Error("获取Dota2球队列表失败: ", err)
		return
	}
	// 调用入库
	dota22.CrateTeam(resp.Interfaces())
}

func (Dota2) SyncInitTeam() {
	var id int
	for {
		resp := response2.TeamApiResponse{}
		queryStr := config.BuildParamsAndUserAndSecret(map[string]interface{}{
			"id":    id,
			"limit": 1000,
		})
		err := restyclient.ESportGetUrlAndBindRecords(config.DOTATeamUrl+queryStr, &resp)
		if err != nil {
			global.Log.Error("获取Dota2球队列表失败: ", err)
			return
		}
		// 调用入库
		dota22.CrateTeam(resp.Interfaces())
		id = resp.Query.MaxID
		if resp.Query.Total != 1000 {
			return
		}
	}

}

// SyncTournament 获取赛事列表
// 返回全量赛事数据，可根据时间戳增量获取新增或变动的数据
// 1、首次全量更新，根据参数id获取全量数据
// 2、后续增量更新，根据参数time增量获取变动数据（建议请求频次：1min/次）
func (Dota2) SyncTournament() {
	resp := response2.TournamentApiResponse{}
	startTime := dota22.GetTournamentTime()
	queryStr := config.BuildParamsAndUserAndSecret(map[string]interface{}{
		"timehelper":  startTime,
		"limit": 1000,
	})
	err := restyclient.ESportGetUrlAndBindRecords(config.DOTATournamentUrl+queryStr, &resp)
	if err != nil {
		global.Log.Error("获取Dota2赛事列表失败: ", err)
		return
	}
	// 调用入库
	dota22.CrateTournament(resp.Interfaces())
}

func (Dota2) SyncInitTournament() {
	var id int
	for {
		resp := response2.TournamentApiResponse{}
		queryStr := config.BuildParamsAndUserAndSecret(map[string]interface{}{
			"id":    id,
			"limit": 1000,
		})
		err := restyclient.ESportGetUrlAndBindRecords(config.DOTATournamentUrl+queryStr, &resp)
		if err != nil {
			global.Log.Error("获取Dota2赛事列表失败: ", err)
			return
		}
		// 调用入库
		dota22.CrateTournament(resp.Interfaces())
		id = resp.Query.MaxID
		if resp.Query.Total != 1000 {
			return
		}
	}
}
